package com.hrcx.mystery.utils.quartz;

import com.hrcx.mystery.service.EbMysteryScheduleJobService;
import lombok.extern.slf4j.Slf4j;
import org.quartz.*;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

/**
 * <h1>定时任务监听器</h1>
 *
 * @author LinXiPeng
 * @className MyTriggerListener
 * @date 2021/12/16 17:27
 * Version 1.0
 */
@Slf4j
@Component
public class MyTriggerListener implements SchedulerListener {
    @Resource
    private EbMysteryScheduleJobService scheduleJobService;

    @Override
    public void jobScheduled(Trigger trigger) {
        log.info("用于部署JobDetail时调用");
    }

    @Override
    public void jobUnscheduled(TriggerKey triggerKey) {
        log.info("用于卸载JobDetail时调用");
    }

    @Override
    public void triggerFinalized(Trigger trigger) {
        log.info("当一个 Trigger 来到了再也不会触发的状态时调用这个方法。<br/>除非这个 Job 已设置成了持久性，否则它就会从 Scheduler 中移除");
    }

    @Override
    public void triggerPaused(TriggerKey triggerKey) {
        log.info("Scheduler 调用这个方法是发生在一个 Trigger被暂停时");
    }

    @Override
    public void triggersPaused(String s) {
        log.info("Scheduler 调用这个方法是发生在一个 Trigger 组被暂停时。<br/>假如是 Trigger 组的话，triggerName 参数将为 null");
    }

    @Override
    public void triggerResumed(TriggerKey triggerKey) {
        log.info("Scheduler 调用这个方法是发生成一个 Trigger从暂停中恢复时");
    }

    @Override
    public void triggersResumed(String s) {
        log.info("Scheduler 调用这个方法是发生成一个 Trigger 组从暂停中恢复时。假如是 Trigger 组的话，triggerName 参数将为 null。");
    }

    @Override
    public void jobAdded(JobDetail jobDetail) {
        log.info("添加job时调用");
    }

    @Override
    public void jobDeleted(JobKey jobKey) {
        Long i = Long.parseLong(jobKey.getName().substring(jobKey.getName().lastIndexOf('_') + 1));
        scheduleJobService.deleteJob(i);
        log.info("组" + jobKey.getGroup() + "定时任务标识" + jobKey.getName() + "被删除!");
    }

    @Override
    public void jobPaused(JobKey jobKey) {
        log.info("挂起Job时调用");
    }

    @Override
    public void jobsPaused(String s) {
        log.info("挂起jobs组时调用，假如是组的话，参数将为null");
    }

    @Override
    public void jobResumed(JobKey jobKey) {
        log.info("恢复Job时调用");
    }

    @Override
    public void jobsResumed(String s) {
        log.info("恢复Job组时调用，假如是组的话，参数将为null");
    }

    @Override
    public void schedulerError(String s, SchedulerException e) {
        log.info("在 Scheduler 的正常运行期间产生一个严重错误" + e);
    }

    @Override
    public void schedulerInStandbyMode() {
        log.info("当前Scheduler处于StandBy模式");
    }

    @Override
    public void schedulerStarted() {
        log.info("当Scheduler 已开启");
    }

    @Override
    public void schedulerStarting() {
        log.info("当Scheduler 开启中");
    }

    @Override
    public void schedulerShutdown() {
        log.info("当Scheduler已停止");
    }

    @Override
    public void schedulerShuttingdown() {
        log.info("当Scheduler停止中");
    }

    @Override
    public void schedulingDataCleared() {
        log.info("Scheduler中的数据被清除");
    }
}